import { Data } from '@/types/common'

/**
 * 返回拦截器,封装api接口，对外暴露,响应拦截success fail  final
 * 1. 返回 Promise 对象
 * 2. 请求成功，服务器有响应
 * 3. 请求失败的，调用可能有问题
 * @param {UniApp.RequestOptions} options 
 * @return 
 */
export const api = <T>(options : UniApp.RequestOptions) => {
	// 1. 返回 Promise 对象
	return new Promise<Data<T>>((resolve, reject) => {
		uni.showLoading()              // 扩展功能,开启Loading
		uni.request({
			...options,
			// 2. 请求成功
			success(res) {
				// 返回数据中 statusCode 状态码判断，这里的statusCode不是Result中的code
				if (res.statusCode === 200) {
					// 提取核心数据
					resolve(res.data as Data<T>)
					// console.log(res);        // 打印返回的数据
				} else {
					// 3. 请求失败
					reject(res)
				}
			},
			fail(err) {
				uni.showToast({
					title: "网络中断"
				})
				reject(err)
			},
			complete() {
				uni.hideLoading()          // 扩展功能,停止Loading
			}
		})
	})
}